package com.keitaitoys.fonteditor.gui.preferences;

import java.awt.Component;
import java.awt.event.KeyEvent;

import javax.swing.Icon;
import javax.swing.JTabbedPane;

import com.keitaitoys.fonteditor.core.LocaleManager;
import com.keitaitoys.fonteditor.core.Manager;
import com.keitaitoys.fonteditor.event.LocaleChangeEvent;
import com.keitaitoys.fonteditor.event.LocaleChangeListener;

public class PreferencesTabbedPane extends JTabbedPane implements LocaleChangeListener {

	//////////////////////////////////////////////////////////////////////
	// Description ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Consts ////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private static final String TAB_EDITOR_CAPTION_LOCALIZE_KEY = "preferences.tabbedpane.tab.editor.caption";
	private static final String TAB_PREVIEW_CAPTION_LOCALIZE_KEY = "preferences.tabbedpane.tab.preview.caption";
	
	public static final int TAB_EDITOR = 0;
	public static final int TAB_PREVIEW = 1;

	//////////////////////////////////////////////////////////////////////
	// Variables /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public PreferencesTabbedPane() {
		
		Manager manager = Manager.getInstance();
		manager.registerPreferencesTabbedPane(this);

		LocaleManager localeManager = LocaleManager.getInstance();
		localeManager.addLocaleChangeListener(this);

		init();
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private void init() {
		
		setEnabled(true);

		localize();
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

    public void insertTab(String title, Icon icon, Component component, String tip, int index) {
    	
    	super.insertTab(title, icon, component, tip, index);
    	
    	if(index == TAB_EDITOR) setMnemonicAt(TAB_EDITOR, KeyEvent.VK_E);
		if(index == TAB_PREVIEW) setMnemonicAt(TAB_PREVIEW, KeyEvent.VK_P);

    	localize();
    }

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private void localize() {
		
		LocaleManager localeManager = LocaleManager.getInstance();

		int tabCount = getTabCount();

		if(TAB_EDITOR < tabCount) setTitleAt(TAB_EDITOR, localeManager.getValue(TAB_EDITOR_CAPTION_LOCALIZE_KEY));
		if(TAB_PREVIEW < tabCount) setTitleAt(TAB_PREVIEW, localeManager.getValue(TAB_PREVIEW_CAPTION_LOCALIZE_KEY));
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void localeChange(LocaleChangeEvent e) {
		
		localize();
	}
}
